#include "stm32f10x.h"                  // Device header
#include "Timer.h"

uint8_t KeyNumber;

/**
  * @brief  按键初始化
  * @param  无
  * @retval 无
  */
void Key_Init()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;                        
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//输入模式下该数值用处不大
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	Timer_Init();  //打开定时器扫描按键
}

/**
  * @brief  获取按键状态
  * @param  无
  * @retval 键码值
  */
uint8_t GetKeyState()
{
	uint8_t KeyNum=0;
	if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)KeyNum=1;
	
	return KeyNum;
}

/**
  * @brief  获取按键键码值
  * @param  无
  * @retval 返回获得的键码值
  */
uint8_t Key_GetNum()
{
	uint8_t temp;
	if(KeyNumber)
	{
		temp=KeyNumber;
		KeyNumber=0;
		return temp;
	}
	return 0;
}

/**
  * @brief  按键扫描（中断中调用）
  * @param  无
  * @retval 无
  */
void Key_Loop()
{
	static uint8_t LastState,NowState;
	/*通过获取上一次按键按下的状态与现在的状态判断按键是否被按下*/
	LastState=NowState;
	NowState=GetKeyState();
	if(LastState==1 && NowState==0)  //此时处于松手状态
	{
		KeyNumber=1;
	}
}
